﻿
//在排序数组中查找元素的第⼀个和最后⼀个位置

//#include <iostream>
//#include <vector>
//
//using namespace std;
//class Solution 
//{
//public:
//    vector<int> searchRange(vector<int>& nums, int target) 
//    {
//        if (nums.size() == 0)
//        {
//            return { -1,-1 };
//        }
//
//        int left = 0; int right = nums.size();
//        while (left < right)
//        {
//            int mid = (left + right) / 2;
//            if (nums[mid] >= target)
//            {
//                right = mid;
//            }
//            else
//            {
//                left = mid + 1;
//            }
//        }
//        if (nums[left] != target)
//        {
//            return { -1,-1 };
//        }
//        int num1 = left;
//
//        left = 0; right = nums.size();
//        while (left < right)
//        {
//            int mid = (left + right + 1) / 2;
//                if (nums[mid] <= target)
//                {
//                    left = mid;
//                }
//                else
//                {
//                    right = mid - 1;
//                }
//        }
//        return { num1,left };
//    }
//};


//int main()
//{
//    Solution S;
//
//    vector<int> x1 = {1, 2, 2, 2, 4, 5, 6};
//    vector<int> a =  S.searchRange(x1, 2);
//
//    for (auto e : a)
//    {
//        cout << e << " ";
//    }
//	return 0;
//}

//⽜可乐和魔法封印
//#include <iostream>
////#include <vector>
//
//using namespace std;
//
//const int N = 1e5 + 10;
//int a[N];
//int n;
//
//int search(int x, int y)
//{
//	int left = 1; int right = n;
//	while (left < right)
//	{
//		int mid = (left + right) / 2;
//		if (a[mid] >= x)
//		{
//			right = mid;
//		}
//		else
//		{
//			left = mid + 1;
//		}
//	}
//	if (a[left] < x) return 0;
//	int num = left;
//
//	left = 1; right = n;
//	while (left < right)
//	{
//		int mid = (left + right + 1) / 2;
//		if (a[mid] <= y)
//		{
//			left = mid;
//		}
//		else
//		{
//			right = mid - 1;
//		}
//	}
//	if (a[left] > y) return 0;
//
//	return left - num + 1;
//}
//
//int main()
//{
//	 cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//	}
//
//	int q; cin >> q;
//	while (q--)
//	{
//		int x, y;
//		cin >> x >> y;
//		cout << search(x, y) << endl;
//	}
//
//	return 0;
//}

// A-B数对
//#include <iostream>
//#include <algorithm>
//using namespace std;
//
//typedef long long LL;
//const int N = 2e5 + 10;
//
//LL a[N];
//LL n, c;
//
//int main()
//{
//	cin >> n >> c;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//	}
//	sort(a + 1, a + n + 1);
//
//	LL ret = 0;
//	for (int i = 2; i <= n; i++)
//	{
//		LL b = a[i] - c;
//		ret += upper_bound(a + 1, a + 1 + n, b) - lower_bound(a + 1, a + 1 + n, b);
//	}
//
//	cout << ret << endl;
//
//	return 0;
//}

////烦恼的⾼考志愿
//#include <iostream>
//#include <algorithm>
//
//using namespace std;
//
//typedef long long LL;
//const int N = 1e6 + 10;
//
//LL a[N];
//int m, n;
//
//int find(LL x)
//{
//	int left = 1, right = m;
//	while (left < right)
//	{
//		int mid = (left + right) / 2;
//		if (a[mid] >= x) right = mid;
//		else left = mid + 1;
//	}
//	return left;
//}
//
//int main()
//{
//	cin >> m >> n;
//	for (int i = 1; i <= m; i++)
//	{
//		cin >> a[i];
//	}
//	sort(a + 1, a + 1 + m);
//	a[0] = -1e7 + 10;
//
//	LL ret = 0;
//	while (n--)
//	{
//		LL b;
//		cin >> b;
//		int pos = find(b);
//		ret += (abs(a[pos] - b), abs(a[pos - 1] - b));
//	}
//	return 0;
//}


//⼆分答案

// ⽊材加⼯
//#include <iostream>
//
//using namespace std;
//
//typedef long long LL;
//const int N = 1e5 + 10;
//
//LL a[N];
//LL n, k;
//
//LL calc(LL x)
//{
//	LL ret = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		ret += a[i] / x;
//	}
//	return ret;
//}
//
//int main()
//{
//	cin >> n >> k;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//	}
//	int sz = sizeof(a) / sizeof(a[1]);
//
//	LL left =  1; LL right = sz;
//	while (left < right)
//	{
//		LL mid = (left + right) / 2;
//		if (calc(mid) >= k)
//		{
//			left = mid;
//		}
//		else
//		{
//			right = mid - 1;
//		}
//	}
//	cout << left << endl;
//	return 0;
//}


//砍树
#include <iostream>
#include <algorithm>
using namespace std;

typedef long long LL;
const int N = 1e6;

LL a[N];
LL n, m;

LL calc(LL x)
{
	LL ret = 0;
	for (int i = 1;i<=n;i++)
	{
		if (a[i] > x)
		{
			ret += (a[i] - x);
		}
	}
	return ret;
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	sort(a + 1, a + 1 + n);

	LL left = 0; LL right = 4e5;
	while (left < right)
	{
		LL mid = (left + right + 1) / 2;
		if (calc(mid) >= m)
		{
			left = mid;
		}
		else
		{
			right = mid -1;
		}
	}

	cout << left << endl;
	return 0;
}